#pragma once

struct Position {
	int row_;
	int col_;
};

enum InputType {
	INPUT_KEY_PRESSED,
	INPUT_MOUSE_LCLICK,
	INPUT_MOUSE_RCLICK,
	INPUT_MOUSE_CCLICK,
};

struct Input {
	int type_;
	int content_;
	Position position_;
};

enum Keys {
	K_LBUTTON = 0x01,
  K_RBUTTON = 0x02,
	K_CANCEL = 0x03,
	K_MBUTTON = 0x04, /* NOT contiguous with L & RBUTTON */
	K_BACK = 0x08,
	K_TAB = 0x09,
	K_CLEAR = 0x0C,
	K_RETURN = 0x0D,
	K_SHIFT = 0x10,
	K_CONTROL = 0x11,
	K_MENU = 0x12,
	K_PAUSE = 0x13,
	K_CAPITAL = 0x14,
	K_ESCAPE = 0x1B,
	K_CONVERT = 0x1C,
	K_NONCONVERT = 0x1D,
	K_ACCEPT = 0x1E,
	K_MODECHANGE = 0x1F,
	K_SPACE = 0x20,
	K_PRIOR = 0x21,
	K_NEXT = 0x22,
	K_END = 0x23,
	K_HOME = 0x24,
	K_LEFT = 0x25,
	K_UP = 0x26,
	K_RIGHT = 0x27,
	K_DOWN = 0x28,
	K_SELECT = 0x29,
	K_PRINT = 0x2A,
	K_EXECUTE = 0x2B,
	K_SNAPSHOT = 0x2C,
	K_INSERT = 0x2D,
	K_DELETE = 0x2E,
	K_HELP = 0x2F,
	/*
	* K_0 - K_9 are the same as ASCII '0' - '9' (= 0x30 - = 0x39)
	* = 0x40 : unassigned
	* K_A - K_Z are the same as ASCII 'A' - 'Z' (= 0x41 - = 0x5A)
	*/
	K_LWIN = 0x5B,
	K_RWIN = 0x5C,
	K_APPS = 0x5D,
	K_SLEEP = 0x5F,
	K_NUMPAD0 = 0x60,
	K_NUMPAD1 = 0x61,
	K_NUMPAD2 = 0x62,
	K_NUMPAD3 = 0x63,
	K_NUMPAD4 = 0x64,
	K_NUMPAD5 = 0x65,
	K_NUMPAD6 = 0x66,
	K_NUMPAD7 = 0x67,
	K_NUMPAD8 = 0x68,
	K_NUMPAD9 = 0x69,
	K_MULTIPLY = 0x6A,
	K_ADD = 0x6B,
	K_SEPARATOR = 0x6C,
	K_SUBTRACT = 0x6D,
	K_DECIMAL = 0x6E,
	K_DIVIDE = 0x6F,
	K_F1 = 0x70,
	K_F2 = 0x71,
	K_F3 = 0x72,
	K_F4 = 0x73,
	K_F5 = 0x74,
	K_F6 = 0x75,
	K_F7 = 0x76,
	K_F8 = 0x77,
	K_F9 = 0x78,
	K_F10 = 0x79,
	K_F11 = 0x7A,
	K_F12 = 0x7B,
	K_F13 = 0x7C,
	K_F14 = 0x7D,
	K_F15 = 0x7E,
	K_F16 = 0x7F,
	K_F17 = 0x80,
	K_F18 = 0x81,
	K_F19 = 0x82,
	K_F20 = 0x83,
	K_F21 = 0x84,
	K_F22 = 0x85,
	K_F23 = 0x86,
	K_F24 = 0x87,
	K_NUMLOCK = 0x90,
	K_SCROLL = 0x91,
};